﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace StarControl
{
    //**  Nave de Combate - Poder especial > missel teleguiado **//
    public class StarfighterShip : Nave
    {
        bool apertouTiroEspecial = false;
        public StarfighterShip(Game game, int jogador)
            : base(game)
        {
            this.setJogador(jogador);
            Initialize();
        }
        
        public override void Initialize()
        {
            base.Initialize();
            posicaoInicialNaves(this.getJogador());
            setImagem(carregarImagem("Textures/naves/Starfight"));
            setImagemEscudoBasico(carregarImagem("imagens/escudo_basico3"));
            this.CriarNave(3, 1, getPosition(), getImagem(), 600.0f, 450.0f, this.getJogador(), 5);
            ativarEscudoBasico();
        }

        public override void Draw(GameTime gameTime)
        {
            base.Draw(gameTime);

            this.barraEnergia.Draw(gameTime, getBatch());
            getBatch().Begin();
                setPosition(getPosition());
                Texture2D _img = getImagem();
                getBatch().Draw(_img, getPosition(), null, Color.White,
                    (float)Math.Atan2(direcao.Y, direcao.X), new Vector2(_img.Width / 2, _img.Height / 2),
                    1.0f, SpriteEffects.None, 0.0f);
            getBatch().End();


            Escudo _escudoBasico = getEscudoBasico();
            // Garante que este escudo foi instanciado
            if (_escudoBasico != null)
            {
                /* escudo básico */
                getEscudoBasico().Update(gameTime);
                getEscudoBasico().Draw(gameTime);
            }

        }

        public override void poderEspecial()
        {
            List<Nave> naves = recuperaComponentesNave();
            Colisao cl = new Colisao(getGame());
            int totalMisseisDestaNave = cl.recuperaComponentesMisseisTotal();

            // Só atira mais um missel se o numero total de misseis desta nave disparados for menor que 2
            if (totalMisseisDestaNave < 2)
            {
                foreach (Nave nave in naves)
                {
                    if (!(nave is StarfighterShip))
                    {
                        MissilTeleguiado missil = new MissilTeleguiado(Game, this, getPosicaoTirosNave(), 0.0f, 5.0f, 300.0f, 350.0f, nave);
                        missil.setBatch(getBatch());
                        getGame().Components.Add(missil);
                    }
                }
            }
            else
            {
                Console.WriteLine("Numero maximo de misseis para esta nave");
            }
        }

        // Ainda é necessário ? metodo acionaArmaPrimaria implementado
        public void armaPrimaria()
        {
            List<Nave> naves = recuperaComponentesNave();
            foreach (Nave nave in naves)
            {
                if (!(nave is StarfighterShip))
                {
                    ArmaPrimaria arma1 = new ArmaPrimaria(Game, 1, nave, 1);
                    getGame().Components.Add(arma1);
                }
            }
        }

        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            // Alterar a tecla usada para ativar o escudo
            if (Keyboard.GetState().IsKeyDown(getBotaoEspecial()) && !apertouTiroEspecial)
            {
                poderEspecial();
                apertouTiroEspecial = true;
            }
            if (Keyboard.GetState().IsKeyUp(getBotaoEspecial()))
            {
                apertouTiroEspecial = false;
            }


            //Arma Primaria
            if (Keyboard.GetState().IsKeyDown(getBotaoTiro()) && !apertouTiro)
            {
                acionaArmaPrimaria();
                apertouTiro = true;
            }
            if (Keyboard.GetState().IsKeyUp(getBotaoTiro()))
            {
                apertouTiro = false;
            }

        }

        // Aciona a arma primaria
        public override void acionaArmaPrimaria()
        {
            ArmaPrimaria arma1 = new ArmaPrimaria(Game, 1, this, 1);
            arma1.setBatch(getBatch());
            getGame().Components.Add(arma1);
        }
        
    }
}
